/**
 *
 * User: c3t
 * Date: 14-1-22
 * Time: 下午5:40
 */
define(function (require, exports, module) {
    return function (jQuery) {
        /*********************************
         * Themes, rules, and i18n support
         * Locale: Chinese; 中文
         *********************************/
        (function ($) {
            /* Global configuration
             */
            $.validator.config({
                //stopOnError: false,
                //theme: 'yellow_right',
                defaultMsg: "{0}格式不正确",
                loadingMsg: "正在验证...",

                // Custom rules
                rules: {
                    digits: [/^\d+$/, "请输入数字"], letters: [/^[a-z]+$/i, "{0}只能输入字母"], tel: [/^(?:(?:0\d{2,3}[- ]?[1-9]\d{6,7})|(?:[48]00[- ]?[1-9]\d{6}))$/, "电话格式不正确"], mobile: [/^1[3-9]\d{9}$/, "手机号格式不正确"], email: [/^(?:[a-z0-9]+[_\-+.]?)*[a-z0-9]+@(?:([a-z0-9]+-?)*[a-z0-9]+\.)+([a-z]{2,})+$/i, "邮箱格式不正确"], qq: [/^[1-9]\d{4,}$/, "QQ号格式不正确"], date: [/^\d{4}-\d{1,2}-\d{1,2}$/, "请输入正确的日期,例:yyyy-mm-dd"], time: [/^([01]\d|2[0-3])(:[0-5]\d){1,2}$/, "请输入正确的时间,例:14:30或14:30:00"], ID_card: [/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[A-Z])$/, "请输入正确的身份证号码"], url: [/^(https?|ftp):\/\/[^\s]+$/i, "网址格式不正确"], postcode: [/^[1-9]\d{5}$/, "邮政编码格式不正确"], chinese: [/^[\u0391-\uFFE5]+$/, "请输入中文"], username: [/^\w{3,12}$/, "请输入3-12位数字、字母、下划线"], password: [/^[0-9a-zA-Z]{6,16}$/, "密码由6-16位数字、字母组成"], accept: function (element, params) {
                        if (!params) return true;
                        var ext = params[0];
                        return (ext === '*') ||
                            (new RegExp(".(?:" + (ext || "png|jpg|jpeg|gif") + ")$", "i")).test(element.value) ||
                            this.renderMsg("只接受{1}后缀", ext.replace('|', ','));
                    }

                }
            });

            /* Default error messages
             */
            $.validator.config({
                messages: {
                    required: "{0}不能为空",
                    remote: "{0}已被使用",
                    integer: {
                        '*': "请输入整数",
                        '+': "请输入正整数",
                        '+0': "请输入正整数或0",
                        '-': "请输入负整数",
                        '-0': "请输入负整数或0"
                    },
                    match: {
                        eq: "{0}与{1}不一致",
                        neq: "{0}与{1}不能相同",
                        lt: "{0}必须小于{1}",
                        gt: "{0}必须大于{1}",
                        lte: "{0}必须小于或等于{1}",
                        gte: "{0}必须大于或等于{1}"
                    },
                    range: {
                        rg: "请输入{1}到{2}的数",
                        gt: "请输入大于或等于{1}的数",
                        lt: "请输入小于或等于{1}的数"
                    },
                    checked: {
                        eq: "请选择{1}项",
                        rg: "请选择{1}到{2}项",
                        gt: "请至少选择{1}项",
                        lt: "请最多选择{1}项"
                    },
                    length: {
                        eq: "请输入{1}个字符",
                        rg: "请输入{1}到{2}个字符",
                        gt: "请输入大于{1}个字符",
                        lt: "请输入小于{1}个字符",
                        eq_2: "",
                        rg_2: "",
                        gt_2: "",
                        lt_2: ""
                    }
                }
            });

            /* Themes
             */
            var TPL_ARROW = '<span class="n-arrow"><b>◆</b><i>◆</i></span>';
            $.validator.setTheme({
                'simple_right': {
                    formClass: 'n-simple',
                    msgClass: 'n-right'
                },
                'simple_bottom': {
                    formClass: 'n-simple',
                    msgClass: 'n-bottom'
                },
                'yellow_top': {
                    formClass: 'n-yellow',
                    msgClass: 'n-top',
                    msgArrow: TPL_ARROW
                },
                'yellow_right': {
                    formClass: 'n-yellow',
                    msgClass: 'n-right',
                    msgArrow: TPL_ARROW
                },
                'yellow_right_effect': {
                    formClass: 'n-yellow',
                    msgClass: 'n-right',
                    msgArrow: TPL_ARROW,
                    msgShow: function ($msgbox, type) {
                        var $el = $msgbox.children();
                        if ($el.is(':animated')) return;
                        if (type === 'error') {
                            $el.css({
                                left: '20px',
                                opacity: 0
                            }).delay(100).show().stop().animate({
                                    left: '-4px',
                                    opacity: 1
                                }, 150).animate({
                                    left: '3px'
                                }, 80).animate({
                                    left: 0
                                }, 80);
                        } else {
                            $el.css({
                                left: 0,
                                opacity: 1
                            }).fadeIn(200);
                        }
                    },
                    msgHide: function ($msgbox, type) {
                        var $el = $msgbox.children();
                        $el.stop().delay(100).show().animate({
                            left: '20px',
                            opacity: 0
                        }, 300, function () {
                            $msgbox.hide();
                        });
                    }
                }
            });
        })(jQuery);
    }
});
